spb/llmindex Public
The discriminative, contamination-resistant, fully transparent LLM ranking — updated live.
TypeScript 77.9%
TeX 15.2%
Python 3.7%
SQL 1.4%
JavaScript 1.1%
Shell 0.5%
1/**2 * llmindex.io — per-domain leaderboard with sub-metrics (live-updating)3 * Author: Simon-Pierre Boucher4 * Contact: contact@spboucher.ai5 * License: Proprietary — © Simon-Pierre Boucher, all rights reserved6 */7import Link from 'next/link';8import { notFound } from 'next/navigation';9import { DOMAINS, INDEX_VERSION, isDomain } from '@llmindex/scoring';10import { LiveLeaderboard, type ApiEntry, type ApiRun } from '@/components/LiveLeaderboard';11import { getLeaderboard } from '@/lib/data';1213export const revalidate = 300;1415export function generateStaticParams() {16 return DOMAINS.map((domain) => ({ domain }));17}1819export default async function DomainLeaderboardPage({ params }: { params: { domain: string } }) {20 if (!isDomain(params.domain)) notFound();21 const data = await getLeaderboard(params.domain);22 const title = params.domain.replaceAll('_', ' ');2324 const initialRun: ApiRun | null = data25 ? {26 id: data.run.id,27 kind: data.run.kind,28 status: data.run.status,29 created_at: new Date(data.run.createdAt).toISOString(),30 notes: data.run.notes,31 }32 : null;33 const initialEntries: ApiEntry[] = (data?.entries ?? []).map((e) => ({34 rank: e.rank,35 model: e.slug,36 name: e.name,37 provider: e.provider,38 score: e.score,39 score_low: e.scoreLow,40 score_high: e.scoreHigh,41 sub_metrics: e.subMetrics,42 }));4344 return (45 <div className="space-y-6">46 <div className="flex flex-wrap items-center gap-3">47 <Link href="/" className="text-sm text-zinc-500 hover:text-zinc-900">48 ← Global49 </Link>50 <h1 className="text-xl font-bold capitalize text-zinc-900 sm:text-2xl">{title}</h1>51 </div>52 <LiveLeaderboard53 domain={params.domain}54 initialRun={initialRun}55 initialEntries={initialEntries}56 indexVersion={data?.run.indexVersion ?? INDEX_VERSION}57 />58 </div>59 );60}61